<script>
  /**
   * @param {number} startPos
   * @param {number} endPos
   * @param {number} k
   * @return {number}
   */
  // 等价于有K个1，每次可以选+号 或者-号, 目标是凑够 endPos - startPos, 
  // 所有K个1 相加为 K, 如果达到目标target, 需要选择t个减号 
  // 那么一共 k -t 个1  t个-1, k - t - t = endPos - startPos
  var numberOfWays = function (startPos, endPos, k) {
    let nums = Array(k).fill(1), target = endPos - startPos, t = k - target, mod = 1e9 + 7
    if (t < 0 || t % 2) return 0
    t >>= 1

    let f = Array(t + 1).fill(0)
    f[0] = 1
    for (let i = 1; i <= k; i++) {
      for (let j = k; j >= 1; j--) {
        f[j] = (f[j] + f[j - 1]) % mod
      }
    }
    return f[t]
  };

  console.log(numberOfWays(startPos = 1, endPos = 2, k = 3))
</script>